<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="utf-8">
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta http-equiv="Content-Style-Type" content="text/css">
  <script src='../bbs.js'></script>

  <!-- Global site tag (gtag.js) - Google Analytics -->
  <script async src="https://www.googletagmanager.com/gtag/js?id=UA-120820034-1"></script>

  <link href="../bbs.css" type="text/css" rel="stylesheet">
  <link rel="shortcut icon" href="/favicon.ico">
  <title>選択範囲の置換について | サクラエディタ過去ログ</title>
</head>
<body>
<ul class="side">
        <a href="./" class="toindex">◀一般トップへ</a>
        <li><div class="list-title">
    <span class="no">1162</span>
    <a class="thread-title" href="1162.html#1162">選択範囲の置換について</a></div>
    <ul><li><div class="list-title">
    <span class="no">1163</span>
    <a class="thread-title" href="1162.html#1163">Re:選択範囲の置換について</a></div>
    <ul><li><div class="list-title">
    <span class="no">1164</span>
    <a class="thread-title" href="1162.html#1164">Re2:選択範囲の置換について</a></div>
    <ul><li><div class="list-title">
    <span class="no">1165</span>
    <a class="thread-title" href="1162.html#1165">Re2:選択範囲の置換について</a></div>
    <ul><li><div class="list-title">
    <span class="no">1168</span>
    <a class="thread-title" href="1162.html#1168">Re3:選択範囲の置換について</a></div>
    </li><li><div class="list-title">
    <span class="no">1169</span>
    <a class="thread-title" href="1162.html#1169">Re3:選択範囲の置換について</a></div>
    </li></ul></li><li><div class="list-title">
    <span class="no">1167</span>
    <a class="thread-title" href="1162.html#1167">Re3:選択範囲の置換について</a></div>
    <ul><li><div class="list-title">
    <span class="no">1170</span>
    <a class="thread-title" href="1162.html#1170">Re4:選択範囲の置換について</a></div>
    <ul><li><div class="list-title">
    <span class="no">1172</span>
    <a class="thread-title" href="1162.html#1172">Re5:選択範囲の置換について</a></div>
    <ul><li><div class="list-title">
    <span class="no">1173</span>
    <a class="thread-title" href="1162.html#1173">Re6:選択範囲の置換について</a></div>
    <ul><li><div class="list-title">
    <span class="no">1175</span>
    <a class="thread-title" href="1162.html#1175">Re7:選択範囲の置換について</a></div>
    <ul><li><div class="list-title">
    <span class="no">1177</span>
    <a class="thread-title" href="1162.html#1177">Re8:選択範囲の置換について</a></div>
    <ul><li><div class="list-title">
    <span class="no">1182</span>
    <a class="thread-title" href="1162.html#1182">Re9:選択範囲の置換について</a></div>
    </li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li>
    </ul><ul class="main"><li><section><h1 id=1162>
    <span class="no">[1162]</span>
    <a class="thread-title" href="#1162">選択範囲の置換について</a>
    <span class="author">Youma</span>
    <time datetime="2002-01-29T13:23:03">2002年01月29日 13:23</time></h1>
    <div class="body">SAKURAをプログラム作成につかわせてもらっていますが、<br>ちょっと不便かな？　と思ったので投稿させて下さい。<br><br>現在、私の持っているSAKURAは、選択範囲の置換が可能です。<br>（Var 1.2.104.1）<br>ですが、選択範囲の置換をする時、選択可能な置換方法が<br>『すべて置換』というのは、すこし危ない気がします。<br><br>以前使っていた秀においては一々、置換する前に確認する<br>かどうか？　といったオプションがありました。<br>（あまり使いませんでしたが）<br><br>SAKURAでの置換の場合、「ファイル内全て」が対象だと、<br>初めに置換対象が変色し、それぞれに対して実行<br>・・・それも、文字列を置換、文字列の前に挿入、文字列の後ろに<br>追加・・といった　置換内容も選択しながらの置換が出来る<br>のが便利だったのですが、この確認しながらの置換及び、<br>置換前の変色確認も選択範囲内置換で、実現していただけると<br>非常に使い勝手がよくなります。<br><br><br></div></section>
    <ul><li><section><h1 id=1163>
    <span class="no">[1163]</span>
    <a class="thread-title" href="#1163">Re:選択範囲の置換について</a>
    <span class="author">hor</span>
    <time datetime="2002-01-29T14:49:39">2002年01月29日 14:49</time></h1>
    <div class="body">▼ Youmaさん<br>&gt; SAKURAでの置換の場合、「ファイル内全て」が対象だと、<br>&gt; 初めに置換対象が変色し、それぞれに対して実行<br>&gt; ・・・それも、文字列を置換、文字列の前に挿入、文字列の後ろに<br>&gt; 追加・・といった　置換内容も選択しながらの置換が出来る<br>&gt; のが便利だったのですが、この確認しながらの置換及び、<br>&gt; 置換前の変色確認も選択範囲内置換で、実現していただけると<br>&gt; 非常に使い勝手がよくなります。<br>&gt; <br><br>複数行を選択した後に置換ダイアログ表示した場合、デフォルトで範囲が「選択範囲」になりますが、<br>その後「ファイル全体」に変更することも出来ます。<br>とりあえず、確認する必要がある場合は範囲を「ファイル全体」に切替えて検索→置換ボタンを押して下さい。<br><br>選択範囲内で確認しながら置換するとなると、もともとの選択範囲がどこなのかと、<br>検索した結果(置換対象)がどれなのかを両方表現する必要があると思いますが、<br>なんだかイメージが沸きません…<br><br>「次のマーク行で確認」みたいなオプションを付けて、<br>そこまできたらメッセージを表示して知らせるってゆうくらいなら、<br>わりと簡単に実装できるかもしれませんが……私は使わないかも。<br></div></section>
    <ul><li><section><h1 id=1164>
    <span class="no">[1164]</span>
    <a class="thread-title" href="#1164">Re2:選択範囲の置換について</a>
    <span class="author">Youma</span>
    <time datetime="2002-01-29T19:14:03">2002年01月29日 19:14</time></h1>
    <div class="body">▼ horさん<br><br>&gt; 複数行を選択した後に置換ダイアログ表示した場合、デフォルトで範囲が「選択範囲」になりますが、<br>&gt; その後「ファイル全体」に変更することも出来ます。<br>&gt; とりあえず、確認する必要がある場合は範囲を「ファイル全体」に切替えて検索→置換ボタンを押して下さい。<br><br>とりあえず、やってみました。上記の行動を行うと<br>ファイル全体には切り替わり、「検索」の実行により文字列を<br>変色させる事は可能なのですが、その後、置換とやると<br>一番上（ファイル全体）から置換されはじめてしまいますね。<br><br>変色させた後、もう一度範囲選択をし直して置換すれば問題は<br>ないのですが、この操作って、<br><br>１：『はじめに、文字列を選択し、検索マークの切り替えをする』<br>２：『普通に範囲選択して置換』<br><br>と、同じですね(笑)　まあ、上記の操作なら、それほど手間暇<br>掛からないのであまり気にしなくても良いかもしれません。<br><br>欲を言うなら、『選択範囲内を検索』（行単位）する機能が<br>欲しいですね。<br><br>それが出来ると、選択範囲内を確認しつつ置換・・・も、<br>できるのでは・・・（希望は止まらない（＾＾；））<br><br>&gt; 選択範囲内で確認しながら置換するとなると、もともとの選択範囲がどこなのかと、<br>&gt; 検索した結果(置換対象)がどれなのかを両方表現する必要があると思いますが、<br>&gt; なんだかイメージが沸きません…<br><br>えっと、操作でやると、ほんと<br><br>１：文字列選択して検索マークの切り替え<br>２：そのまま範囲選択する<br><br>を、やった時の表示で良いのでは？<br>まさに、あんな感じで、一つ一つチェックして、<br>問題の場所を越えたら　残りは一気置換しちゃえ～・・・・とか（W<br><br>&gt; 「次のマーク行で確認」みたいなオプションを付けて、<br>&gt; そこまできたらメッセージを表示して知らせるってゆうくらいなら、<br>&gt; わりと簡単に実装できるかもしれませんが……私は使わないかも。<br><br>あううう・・・データベースの元データ<br>（CSVファイルやTSVファイル）の担当をしてる私としては、<br>これって、まさに理想の機能ですね（爆）<br><br>/*<br>最近やった、主な置換作業<br><br>１ファイル<br>１万件以上のデータの中から、特定のEmailアドレスのデータを<br>探し出して、レコードごと削除。<br>（ただし、[Test]の文字列を含んでいても、テスト用Emailでない<br>データまで混じってるので、それは消さない）<br><br>・・・上記のような雑用で死に目に遭いました(TT)<br>しかも、データがEUCやS-JIS、統一ないし。＜ファイル毎に。<br><br>対象データ（[Test]）を含む行をGrepで探し、その行にタグジャンプ<br>その行を削除・・・という単純作業を延々・・・・っとやり尽くしました。<br>100行未満は消しちゃいけないTestのemailって・・・なんじゃ<br>このデータ仕様はぁ～　と、設計者の脳みそを解析したくなりました（W<br>*/<br><br></div></section>
    <ul><li><section><h1 id=1165>
    <span class="no">[1165]</span>
    <a class="thread-title" href="#1165">Re2:選択範囲の置換について</a>
    <span class="author">げんた</span>
    <time datetime="2002-01-29T19:27:15">2002年01月29日 19:27</time></h1>
    <div class="body">▼Youmaさん<br>&gt;１万件以上のデータの中から、特定のEmailアドレスのデータを<br>&gt;探し出して、レコードごと削除。<br>&gt;（ただし、[Test]の文字列を含んでいても、テスト用Emailでない<br>&gt;データまで混じってるので、それは消さない）<br>こういうのって，既にエディタで行う領域を越えているのでは？<br>sedとかperlをつかいませう．<br><br>&gt;100行未満は消しちゃいけないTestのemailって・・・なんじゃ<br>というのも簡単にできると思いますよ．<br><br>ただ<br>&gt;しかも、データがEUCやS-JIS、統一ないし。＜ファイル毎に。<br>というのはちょっとつらいかもしれませんが．<br><br>&gt;このデータ仕様はぁ～　と、設計者の脳みそを解析したくなりました（W<br>これには同意．(w<br></div></section>
    <ul><li><section><h1 id=1168>
    <span class="no">[1168]</span>
    <a class="thread-title" href="#1168">Re3:選択範囲の置換について</a>
    <span class="author">Youma</span>
    <time datetime="2002-01-29T20:17:18">2002年01月29日 20:17</time></h1>
    <div class="body">▼ げんたさん<br>&gt; ▼Youmaさん<br>&gt; &gt;１万件以上のデータの中から、特定のEmailアドレスのデータを<br>&gt; &gt;探し出して、レコードごと削除。<br>&gt; &gt;（ただし、[Test]の文字列を含んでいても、テスト用Emailでない<br>&gt; &gt;データまで混じってるので、それは消さない）<br>&gt; こういうのって，既にエディタで行う領域を越えているのでは？<br>&gt; sedとかperlをつかいませう．<br><br>まったくその通りですね＾＾；<br>『正規表現』で検索すればたぶんもっと楽だったろうけど<br>わからんし（W　＜おひ<br><br>そのうち、正規表現については勉強するとして、<br>現状では、簡単にWSHでプログラム組むほうが効率がよい<br>と気付きました（W<br>＜つまり、面倒がってエディタ直接編集かましたんですな（W<br><br><br></div></section>
    </li><li><section><h1 id=1169>
    <span class="no">[1169]</span>
    <a class="thread-title" href="#1169">Re3:選択範囲の置換について</a>
    <span class="author">hor</span>
    <time datetime="2002-01-29T20:26:25">2002年01月29日 20:26</time></h1>
    <div class="body">▼ げんたさん<br>&gt; ▼Youmaさん<br>&gt; &gt;１万件以上のデータの中から、特定のEmailアドレスのデータを<br>&gt; &gt;探し出して、レコードごと削除。<br>&gt; &gt;（ただし、[Test]の文字列を含んでいても、テスト用Emailでない<br>&gt; &gt;データまで混じってるので、それは消さない）<br>&gt; こういうのって，既にエディタで行う領域を越えているのでは？<br>&gt; sedとかperlをつかいませう．<br>&gt; <br>開発掲示版によればVBScriptをご存知ってことなので、<br>嫌いじゃなければExcelのVBAを使うって手もあるかと。<br><br>&gt; &gt;しかも、データがEUCやS-JIS、統一ないし。＜ファイル毎に。<br>&gt; というのはちょっとつらいかもしれませんが．<br>&gt; <br>オリジナルのファイルを加工しやすい文字コードに変換したあとに加工するのが楽です。<br>もちろん加工後に元の文字コードに戻せれば、の話ですけど。</div></section>
    </li></ul></li><li><section><h1 id=1167>
    <span class="no">[1167]</span>
    <a class="thread-title" href="#1167">Re3:選択範囲の置換について</a>
    <span class="author">hor</span>
    <time datetime="2002-01-29T19:53:55">2002年01月29日 19:53</time></h1>
    <div class="body">▼ Youmaさん<br>&gt; まさに、あんな感じで、一つ一つチェックして、<br>&gt; 問題の場所を越えたら　残りは一気置換しちゃえ～・・・・とか（W<br><br>「すべて置換」するときのオプションに、<br>・ファイル先頭からカーソル位置まで<br>・カーソル位置からファイルの最後まで<br>・カーソル位置から次マーク行まで<br><br>を指定できるようにって事でしょうか？</div></section>
    <ul><li><section><h1 id=1170>
    <span class="no">[1170]</span>
    <a class="thread-title" href="#1170">Re4:選択範囲の置換について</a>
    <span class="author">Youma</span>
    <time datetime="2002-01-29T20:57:04">2002年01月29日 20:57</time></h1>
    <div class="body">▼ horさん<br>&gt; ▼ Youmaさん<br>&gt; &gt; まさに、あんな感じで、一つ一つチェックして、<br>&gt; &gt; 問題の場所を越えたら　残りは一気置換しちゃえ～・・・・とか（W<br>&gt; <br>&gt; 「すべて置換」するときのオプションに、<br>&gt; ・ファイル先頭からカーソル位置まで<br>&gt; ・カーソル位置からファイルの最後まで<br>&gt; ・カーソル位置から次マーク行まで<br>&gt; <br>&gt; を指定できるようにって事でしょうか？<br><br>あ、マークってそういう意味だったんですか。<br><br>私はてっきり、選択範囲（行102～行122までを反転させたり）<br>は、プログラムの中で　102行目から122行目・・・って感じに<br>認識してると考えてました。<br><br>　より厳密には　102行目の１桁目　から　122行目のCRLF(Codeによる)<br>　まで・・・とかって。<br><br>/*<br>秀の方だと上から順繰りに確認していって、<br>それを承認して・・・・目的外のがあったら非承認で・・・<br>それを、２０回も繰り返すと、残りは、『おそらく<br>大丈夫だろう』と、『一気』ボタンを押したり<br><br>とかを、イメージしてました。<br>*/<br><br>・・・なるほど、現時点のカーソルを基点に、あらかじめマークをふって、<br>そこまでは確認しつつ置換・・・後は自動・・・とかってやり方もあるんですね。<br><br><br>～～～～～～<br><br>イメージ的にはこうですか？<br><br>　検索対象　『hoge』<br><br>1 | &lt;%<br>2 | dim a<br>3 | dim b<br>4 | dim hoge(2)<br><br>（中略）<br><br>20| Sub Del_hoge() ・・//・・ <br>（中略）<br>32| end Sub<br>33| hoge(1) = hoge(1) + 1<br><br>等のプログラムがあって、後から<br><br>hoge は　ihoge　に直そう。<br><br>と考えた場合、　１～2０行の中のhoge　を　ihoge に<br>直し、問題のSub は手をつけず、<br>Subの終わった後の　33行目からhoge ⇒ ihoge<br><br>って使い方を想定していました。<br>/*<br>　実際には、i ⇒ int　とか　&lt; ⇒ &amp;lf　等ですが(笑)<br>　しかも、この置換を特定の行番号内だけで行う<br>　（宣言部には手出しせずにメインルーチン内だけを置換等）<br>*/<br><br>～～～～～<br><br>aspのプログラムを書くときとかは、HTMLの記述部分と<br>VbScriptの記述方法の部分、JavaScriptの部分が<br>入り混じってて、置換作業で手間取るのですよね。<br><br>よく置換が必要になる条件というのは、私の知る限り<br>上記のような修正時だと思うのですが、<br>何文字目から・・・とかは、オーバースペックな気もするので<br>ほんと、何行から何行の間を、一つ一つ確認しながら置換<br>（どこまで・・・とかも要らないかも。<br>　一つ『あとはまかせたボタン』があれば(笑)）<br><br>マクロエンジンが正式に搭載された後は、<br>選択範囲を切り取って渡して、クリップボードに<br>溜めといた検索文字列を切り取った範囲内から見つけだし、<br>全部置換しつくしたあと、なにげなくもとの場所に<br>貼り付ける・・・とかってのも、実現可能なんだろうなぁ。<br><br>//なんか、長文になってしまいました。すみません。<br></div></section>
    <ul><li><section><h1 id=1172>
    <span class="no">[1172]</span>
    <a class="thread-title" href="#1172">Re5:選択範囲の置換について</a>
    <span class="author">hor</span>
    <time datetime="2002-01-29T21:39:18">2002年01月29日 21:39</time></h1>
    <div class="body">なんだか話が噛み合ってない気がしますが…まいっか。<br><br>▼ Youmaさん<br>&gt; 何文字目から・・・とかは、オーバースペックな気もするので<br>&gt; ほんと、何行から何行の間を、一つ一つ確認しながら置換<br>&gt; （どこまで・・・とかも要らないかも。<br>&gt; 　一つ『あとはまかせたボタン』があれば(笑)）<br><br>「すべて置換」するときのオプションに「カーソル位置から…」みたいなのがあれば、<br>上で書き込まれてる内容をそのまま実現できますよね…伝わってます？<br><br>&gt; 選択範囲を切り取って渡して、クリップボードに<br>&gt; 溜めといた検索文字列を切り取った範囲内から見つけだし、<br>&gt; 全部置換しつくしたあと、なにげなくもとの場所に<br>&gt; 貼り付ける・・・とかってのも、実現可能なんだろうなぁ。<br><br>これって今の選択範囲内すべて置換といっしょでは？</div></section>
    <ul><li><section><h1 id=1173>
    <span class="no">[1173]</span>
    <a class="thread-title" href="#1173">Re6:選択範囲の置換について</a>
    <span class="author">げんた</span>
    <time datetime="2002-01-29T22:43:07">2002年01月29日 22:43</time></h1>
    <div class="body">▼ horさん<br>&gt;▼ Youmaさん<br>&gt;&gt; 選択範囲を切り取って渡して、クリップボードに<br>&gt;&gt; 溜めといた検索文字列を切り取った範囲内から見つけだし、<br>&gt;&gt; 全部置換しつくしたあと、なにげなくもとの場所に<br>&gt;&gt; 貼り付ける・・・とかってのも、実現可能なんだろうなぁ。<br>&gt;<br>&gt;これって今の選択範囲内すべて置換といっしょでは？<br>たぶん，クリップボードには複数の文字列を設定しておきたいのでは？<br>A→X, B→Y, C→Zというのを予め表を作っておいて一括して行いたいとか．<br>でもそれこそsed使え～って感じです．<br>s/A/X/<br>s/B/Y/<br>s/C/Z/<br>でできますもん．<br><br>やっぱり検索範囲を切り出して外部コマンドに渡し，その結果を選択範囲と置き換える機能欲しいですね．<br>そうすれば個別の要望にも"sedかperlで対応できます"と答えられる．<br></div></section>
    <ul><li><section><h1 id=1175>
    <span class="no">[1175]</span>
    <a class="thread-title" href="#1175">Re7:選択範囲の置換について</a>
    <span class="author">hor</span>
    <time datetime="2002-01-29T23:10:09">2002年01月29日 23:10</time></h1>
    <div class="body">▼ げんたさん<br>&gt; たぶん，クリップボードには複数の文字列を設定しておきたいのでは？<br>&gt; A→X, B→Y, C→Zというのを予め表を作っておいて一括して行いたいとか．<br>&gt; でもそれこそsed使え～って感じです．<br>&gt; s/A/X/<br>&gt; s/B/Y/<br>&gt; s/C/Z/<br>&gt; でできますもん．<br>&gt; <br>&gt; やっぱり検索範囲を切り出して外部コマンドに渡し，その結果を選択範囲と置き換える機能欲しいですね．<br>&gt; そうすれば個別の要望にも"sedかperlで対応できます"と答えられる．<br><br>PPAの実装がうまくいけば"sedかperlで…"って応えなくてもいいかも…<br>sedやperlの知識を持ってるユーザーさんばかりじゃないでしょうし。<br>開発メンバー相手にsedとかperl使えばってゆうのはわかりますけど、<br>ユーザーに向けにそうゆう回答するのはちょっと乱暴な気がします。</div></section>
    <ul><li><section><h1 id=1177>
    <span class="no">[1177]</span>
    <a class="thread-title" href="#1177">Re8:選択範囲の置換について</a>
    <span class="author">げんた</span>
    <time datetime="2002-01-30T01:10:21">2002年01月30日 01:10</time></h1>
    <div class="body">▼ horさん<br>&gt; sedやperlの知識を持ってるユーザーさんばかりじゃないでしょうし。<br>それはそうですけど。まぁ頻度の問題でしょう。<br>Youmaさんのように多量のデータを業務で恒常的(？)に使う人はテキスト処理ツール無しでは時間を費やすばかりです。<br>sedのsと範囲指定だけ知っているだけでも置換系はかなりいけるのではないでしょうか。<br><br>&gt; ユーザーに向けにそうゆう回答するのはちょっと乱暴な気がします。<br>もちろんそういうツールに習熟した人ばかりではないですが、そういう機能があればサクラエディタには習熟していないけど汎用ツールに習熟した人が代わりにスクリプトを作ってくれるかもしれません。<br>まぁ回答としては乱暴ですが「perlで出来ますよ。ってことで誰かお願い～」ってことです。<br>文書加工専用掲示板とか作ってそこでスクリプトを交換してもらったり。<br><br>本音としては常に使う編集機能に力を注いで、(私にとっては)頻度の低い加工機能は分離したいですね。<br>作業の８割では２割の機能しか使わない。</div></section>
    <ul><li><section><h1 id=1182>
    <span class="no">[1182]</span>
    <a class="thread-title" href="#1182">Re9:選択範囲の置換について</a>
    <span class="author">Youma</span>
    <time datetime="2002-01-30T11:07:41">2002年01月30日 11:07</time></h1>
    <div class="body">▼ げんたさん<br>&gt; 本音としては常に使う編集機能に力を注いで、(私にとっては)頻度の低い加工機能は分離したいですね。<br>&gt; 作業の８割では２割の機能しか使わない。<br><br>それっすよ、それ（爆）　多分、おそらく言いたかったのは(笑)<br><br>▼ horさん<br>&gt;「すべて置換」するときのオプションに「カーソル位置から…」みたいなのがあれば、<br>&gt;上で書き込まれてる内容をそのまま実現できますよね…伝わってます？<br><br>えっと、機能的に同じ事をしたいのではなく、選択範囲の置換で<br>確認動作を行うオプションが欲しいな・・・と思ったわけです。<br>今のままだと、やった直後には全部置換終了しちゃうので。<br><br>ただ、提案してみてその実現方法とかまで考えて見ると、<br>とっても処理系が面倒そうなので、あまり手を加えず、<br>代案として選択範囲を外に切り出して加工すれば<br>そっちのが簡単じゃんと思ったわけです<br><br>私が外に切り出して～といってたのは、今の置換とほとんど同じ<br>ですが、違いは、別SAKURA内に置換対象範囲を切り取って<br>『全て置換』を行う為、現行の機能の確認しつつ置換/一気に置換が、<br>あたかも、『選択範囲内置換』に追加したように見えるって<br>だけです(笑)<br><br>高度な編集作業などは、普段使わないだけに、げんたさんの<br>おっしゃるように、外部ツールに渡して行うほうが<br>能率的と思います。<br><br>（と、ここ数日で嫌というほど気付きました（W))<br><br>/*<br>なので、置換等に関しては別スレッドにある『カーソル位置に<br>取り込む～機能』が実装されたと仮定すると、<br>外部プログラムの実行機能とあと、ちょっとのキーマクロ<br>で実現できそうです。そっちのが早そう(笑)<br><br>私がすべきことは、Sadを覚えるってのと正規表現を覚える<br>程度っすね（W<br>*/<br><br><br></div></section>
    </li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></body></html>